/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package aprendizadosemfio.events;

import aprendizadosemfio.entidades.Imagens;
import aprendizadosemfio.Montagem.PainelMalha;
import aprendizadosemfio.Montagem.PopupMenu;
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import javax.swing.ImageIcon;

/**
 *
 * @author Igor
 */
public class MouseEvents implements MouseListener, MouseMotionListener {

    ImageIcon img;
    PainelMalha panel;
    ArrayList<aprendizadosemfio.entidades.Imagens> figuras = new ArrayList<aprendizadosemfio.entidades.Imagens>();
    boolean movendo = false;
    Imagens atual = null;
    PopupMenu pop = null;

    public void mouseDragged(MouseEvent e) {
        if (movendo) {
            figuras.remove(atual);
            this.panel.repaint();
            atual.setPositionX(e.getX());
            atual.setPositionY(e.getY());
            figuras.add(atual);
        }
        panel.repaint();
    }

    public void mouseMoved(MouseEvent e) {
        if (img != null) {

            if (img.getDescription().equals("delete")) {
                this.panel.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
            } else {
                this.panel.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                this.panel.setImg(img);
                this.panel.setVert(e.getY());
                this.panel.setHor(e.getX());
                this.panel.repaint();
            }
        }
    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        //parte de adicionar ou deletar objetos
        this.panel.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
        if (pop != null) {
            pop.dispose();
            pop = null;
        }
        if (img != null) {
            Imagens lab = new Imagens();


            if (img.getDescription().equals("muro")) {
                lab.setTipo("muro");
            } else if (img.getDescription().equals("impressora")) {
                lab.setTipo("impressora");
            } else {
                lab.setTipo("normal");
            }

            if (img.getDescription().equals("delete")) {

                for (int i = 0; i < figuras.size(); i++) {
                    if (figuras.get(i).getRange() <= 5) {
                        if (e.getX() >= figuras.get(i).getPositionX() - 45 && e.getX() <= figuras.get(i).getPositionX() + 96 && e.getY() >= figuras.get(i).getPositionY() - 55 && e.getY() <= figuras.get(i).getPositionY() + 85) {
                            figuras.remove(figuras.get(i));
                            img = null;
                            this.panel.setImg(null);
                            break;
                        }
                    } else if (figuras.get(i).getRange() <= 10) {
                        if (e.getX() >= figuras.get(i).getPositionX() - 75 && e.getX() <= figuras.get(i).getPositionX() + 126 && e.getY() >= figuras.get(i).getPositionY() - 85 && e.getY() <= figuras.get(i).getPositionY() + 115) {
                            figuras.remove(figuras.get(i));
                            img = null;
                            this.panel.setImg(null);
                            break;
                        }
                    } else {
                        if (e.getX() >= figuras.get(i).getPositionX() - 105 && e.getX() <= figuras.get(i).getPositionX() + 156 && e.getY() >= figuras.get(i).getPositionY() - 115 && e.getY() <= figuras.get(i).getPositionY() + 145) {
                            figuras.remove(figuras.get(i));
                            img = null;
                            this.panel.setImg(null);
                            break;
                        }
                    }
                }
            } else {

                lab.setImagem(img);
                lab.setPositionX(e.getX());
                lab.setPositionY(e.getY());
                figuras.add(lab);
            }


            //parte de mover objetos
        } else {
            for (int i = 0; i < figuras.size(); i++) {
                if (figuras.get(i).getRange() <= 5) {
                    if (e.getX() >= figuras.get(i).getPositionX() - 45 && e.getX() <= figuras.get(i).getPositionX() + 96 && e.getY() >= figuras.get(i).getPositionY() - 55 && e.getY() <= figuras.get(i).getPositionY() + 85) {
                        if (e.getButton() == 3) {
                            pop = new PopupMenu();
                            pop.setVisible(true);
                            pop.setAtual(figuras.get(i));
                            pop.setPanelPai(this.panel);
                            pop.getFoto().setIcon(new ImageIcon(figuras.get(i).imagem.getImage()));
                            pop.setLocation(e.getX(), e.getY());
                        }
                        atual = figuras.get(i);
                        movendo = true;
                        break;
                    }
                } else if (figuras.get(i).getRange() <= 10) {
                    if (e.getX() >= figuras.get(i).getPositionX() - 75 && e.getX() <= figuras.get(i).getPositionX() + 126 && e.getY() >= figuras.get(i).getPositionY() - 85 && e.getY() <= figuras.get(i).getPositionY() + 115) {
                        if (e.getButton() == 3) {
                            pop = new PopupMenu();
                            pop.setVisible(true);
                            pop.setAtual(figuras.get(i));
                            pop.setPanelPai(this.panel);
                            pop.getFoto().setIcon(new ImageIcon(figuras.get(i).imagem.getImage()));
                            pop.setLocation(e.getX(), e.getY());
                        }
                        atual = figuras.get(i);
                        movendo = true;
                        break;
                    }
                } else {
                   if (e.getX() >= figuras.get(i).getPositionX() - 105 && e.getX() <= figuras.get(i).getPositionX() + 156 && e.getY() >= figuras.get(i).getPositionY() - 115 && e.getY() <= figuras.get(i).getPositionY() + 145) {
                        if (e.getButton() == 3) {
                            pop = new PopupMenu();
                            pop.setVisible(true);
                            pop.setAtual(figuras.get(i));
                            pop.setPanelPai(this.panel);
                            pop.getFoto().setIcon(new ImageIcon(figuras.get(i).imagem.getImage()));
                            pop.setLocation(e.getX(), e.getY());
                        }
                        atual = figuras.get(i);
                        movendo = true;
                        break;
                    }
                }


            }

        }

        this.panel.setFiguras(figuras);
        img = null;
        this.panel.repaint();

    }

    public void mouseReleased(MouseEvent e) {
        this.panel.setImg(null);
        movendo = false;
        atual = null;
        this.panel.repaint();
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

    public void setImg(ImageIcon img) {
        this.img = img;
    }

    public void setPanel(PainelMalha panel) {
        this.panel = panel;
    }
}
